--- created: source_filename: /home/runner/work/mknodes/mknodes/mknodes/pages/mkclasspage/__init__.py source_function: MkClassPage.__init__ source_line_no: 46 hide: - toc icon: octicons/table-24 template: SUMMARY.html title: MkTable --- [:fa-brands-github: Show source on GitHub](https://github.com/phil65/mknodes/blob/main/mknodes/basenodes/mktable/__init__.py) ### Class representing a formatted table. === "Examples" ### Example: **Regular** !!! jinja "Jinja" ``` {.jinja } {{ {"Column A": ["A", "B", "C"], "Column B": ["C", "D", "E"]} | MkTable }} ``` !!! python "Python" ``` {.python } MkTable(data={'Column A': ['A', 'B', 'C'], 'Column B': ['C', 'D', 'E']}) ``` ===! "Rendered" | Column A | Column B | | -------- | -------- | | A | C | | B | D | | C | E | === "Markdown" ``` {.markdown } | Column A | Column B | | -------- | -------- | | A | C | | B | D | | C | E | ``` === "Html" ``` {.html }
Column A Column B
A C
B D
C E
``` === "Repr tree" ``` MkTable ├── MkText('A') ├── MkText('B') ├── MkText('C') ├── MkText('C') ├── MkText('D') ╰── MkText('E') ``` === "DocStrings" ::: mknodes.MkTable options: show_docstring_description: False === "Base classes" | Name | Children | Inherits | |--- | --- | --- | | **[MkBaseTable](https://phil65.github.io/mknodes/)**
*mknodes.basenodes.mkbasetable*
Base Class for MkTables\. Only deals with managing the data\. | | | === "⋔ Inheritance diagram" ``` mermaid graph TD 94272685834176["mktable.MkTable"] 94272694451264["mkbasetable.MkBaseTable"] 94272697822880["mkcontainer.MkContainer"] 94272697820320["mknode.MkNode"] 94272697777776["node.Node"] 139836355973312["builtins.object"] 94272694451264 --> 94272685834176 94272697822880 --> 94272694451264 94272697820320 --> 94272697822880 94272697777776 --> 94272697820320 139836355973312 --> 94272697777776 ``` === "NodeFile" ``` {.toml title='/home/runner/work/mknodes/mknodes/mknodes/basenodes/mktable/metadata.toml'} [metadata] icon = "octicon:table-24" name = "MkTable" [requirements.extension.tables] [examples.regular] title = "Regular" jinja = """ {{ {"Column A": ["A", "B", "C"], "Column B": ["C", "D", "E"]} | MkTable }} """ [example.list_of_dicts] title = "From list of dicts" jinja = """ {{ [{"col 1": "abc", "col 2": "cde"}, {"col 1": "fgh", "col 2": "ijk"}] | MkTable }} """ # [output.markdown] # template = """ # {% for k in table_data.keys() %} # {% endfor %} # {% for row in self.iter_rows() %} # {% endfor %} # """ ``` === "Code" ``` {.python title='mknodes.basenodes.mktable.MkTable' linenums='10'} class MkTable(mkbasetable.MkBaseTable): """Class representing a formatted table.""" REQUIRED_EXTENSIONS = [resources.Extension("tables")] def _to_markdown(self) -> str: table_data = self.data # property if not any(table_data[k] for k in table_data): return "" widths = [self.width_for_column(c) for c in table_data] formatters = [f"{{:<{width}}}" for width in widths] headers = [formatters[i].format(k) for i, k in enumerate(table_data.keys())] divider = [width * "-" for width in widths] data = [ [ formatters[i].format(str(k).replace("\n", "
")) for i, k in enumerate(row) ] for row in self.iter_rows() ] header_txt = "| " + " | ".join(headers) + " |" divider_text = "| " + " | ".join(divider) + " |" data_txt = ["| " + " | ".join(line) + " |" for line in data] return "\n".join([header_txt, divider_text, *data_txt]) + "\n" ```